const date = new Date()
const years = []
const months = []
const days = []

for (let i = 1990; i <= date.getFullYear(); i++) {
  years.push(i)
}

for (let i = 1; i <= 12; i++) {
  months.push(i)
}

for (let i = 1; i <= 31; i++) {
  days.push(i)
}

// miniprogram/pages/adminMenu/adminMenu.js

Page({

  /**
   * 页面的初始数据
   */
  data: {
    page: 0,
    currentTab: 0,
    studentInfoList: null,
    contents: '这是可以复制的文字,粘贴后即可看到效果',

    years: years,
    year: date.getFullYear(),
    months: months,
    month: 2,
    days: days,
    day: 2,
    value: [9999, 1, 1],

    grade: [
      { name: 'grade1', value: '第一学年', checked: 'true' },
      { name: 'grade2', value: '第二学年'},
      { name: 'grade3', value: '第三学年' },
    ],
    gradeSelect:'grade1',
    note:"",
    name: "",
    classStudent: 0,
    yingyu : 0,
    shuxue: 0,
    yuwen: 0,
    wuli: 0,
    huaxue: 0,
    shengwu: 0,
    lishi: 0,
    dili: 0,
    zhengzhi: 0,

    endX: '',
    endY: '',
    startX: '',
    startY: ''
  },

  noteNameInput: function (e) {
    this.setData({
      note: e.detail.value
    })
  },

  studentNameInput: function (e) {
    this.setData({
      name: e.detail.value
    })
  },
  classInput: function (e) {
    this.setData({
      classStudent: e.detail.value
    })
  },
  yingyuInput: function (e) {
    this.setData({
      yingyu: e.detail.value
    })
  },
  shuxueInput: function (e) {
    this.setData({
      shuxue: e.detail.value
    })
  },
  yuwenInput: function (e) {
    this.setData({
      yuwen: e.detail.value
    })
  },
  wuliInput: function (e) {
    this.setData({
      wuli: e.detail.value
    })
  },
  huaxueInput: function (e) {
    this.setData({
      huaxue: e.detail.value
    })
  },
  shengwuInput: function (e) {
    this.setData({
      shengwu: e.detail.value
    })
  },
  lishiInput: function (e) {
    this.setData({
      lishi: e.detail.value
    })
  },
  zhengzhiInput: function (e) {
    this.setData({
      zhengzhi: e.detail.value
    })
  },
  diliInput: function (e) {
    this.setData({
      dili: e.detail.value
    })
  },

  bindChange: function (e) {
    const val = e.detail.value
    this.setData({
      year: this.data.years[val[0]],
      month: this.data.months[val[1]],
      day: this.data.days[val[2]]
    })
  },
  radioChange: function (e) {
    console.log('radio发生change事件，携带value值为：', e.detail.value)
    this.setData({
      gradeSelect: e.detail.value
    })
  },

  // 添加
  sumbitScore : function(){
    var year = this.data.year;
    var month = this.data.month;
    var day = this.data.day;
    var _id = '';

    const db = wx.cloud.database();

    // 查询学生
    db.collection('user_info').where({
      name: this.data.name,
      class: this.data.classStudent
    }).get({
      success: res => {
        console.log('[数据库] [查询记录] 成功, 根据姓名和班级查询: ', res)
        if (res.data.length > 0) {
          _id = res.data[0]._id;

          // 写入成绩
          db.collection('student_score').add({
            data: {
              name: this.data.name,
              class: this.data.classStudent,
              grade: this.data.gradeSelect,
              date: year + '-' + month + '-' + day,

              score : {
                  yingyu: this.data.yingyu,
                  shuxue: this.data.shuxue,
                  yuwen: this.data.yuwen,
                  wuli: this.data.wuli,
                  huaxue: this.data.huaxue,
                  shengwu: this.data.shengwu,
                  lishi: this.data.lishi,
                  dili: this.data.dili,
                  zhengzhi: this.data.zhengzhi
              },
              userId: _id
            },
            success: res => {
              // 在返回结果中会包含新创建的记录的 _id
              this.setData({
                counterId: res._id,
                count: 1
              })
              wx.showToast({
                title: '新增记录成功'
              })

              setTimeout(function () {
                wx.navigateTo({
                  url: '/pages/adminMenu/adminMenu?'
                })
              }, 400, null);

              console.log('[数据库] [新增记录] 成功，记录 _id: ', res._id)
            },
            fail: err => {
              wx.showToast({
                icon: 'none',
                title: '新增记录失败'
              })
              console.error('[数据库] [新增记录] 失败：', err)
            }
          })

        }else{
          wx.showToast({
            icon: 'none',
            title: '查询不到当前学生'
          })
          return;
        }
      },
      fail: err => {
        wx.showToast({
          icon: 'none',
          title: '查询不到当前学生'
        })
        console.error('[数据库] [查询记录] 失败：', err)
      }
    })
    
  },

  addStudentPage:function(){
    wx.navigateTo({
      url: '/pages/addStudent/addStudent?'
    })
  },

  // 删除学生
  deleteStudent :function(e){
    var student = e.currentTarget.dataset['index'];
    console.log('delete: ' + student)
    wx.showModal({
      title: '删除用户',
      content: '您确定要删除 ' + student.name+' 吗？',
      success: function (res) {
        if (res.confirm) {
          console.log('用户点击确定')
          const db = wx.cloud.database()
          db.collection('user_info').doc(student._id).remove({
            success: function (res) {
              // 在返回结果中会包含新创建的记录的 _id
              wx.showToast({
                title: '删除成功'
              })
              setTimeout(function () {
                wx.navigateTo({
                  url: '/pages/adminMenu/adminMenu?'
                })
              }, 300, null);
              
              console.log('[数据库] [新增记录] 成功，记录 _id: ', res)
            },
            fail: err => {
              wx.showToast({
                icon: 'none',
                title: '删除失败，当前学生非您创建！'
              })
              console.error('[数据库] [新增记录] 失败：', err)
            }
          })
        } else if (res.cancel) {
          console.log('用户点击取消')
        }
      }
    })
  },

  clickTab: function (e) {
    this.onLoad();
    var that = this;
    if (this.data.currentTab === e.target.dataset.current) {
      return false;
    } else {
      that.setData({
        currentTab: e.target.dataset.current,
      })
    }
  },

  copyText: function (e) {
    console.log(e)
    wx.setClipboardData({
      data: e.currentTarget.dataset.text,
      success: function (res) {
        wx.getClipboardData({
          success: function (res) {
            wx.showToast({
              title: '复制成功'
            })
          }
        })
      }
    })
  },

  testFunction() {
    wx.cloud.callFunction({
      name: 'sum',
      data: {
        a: 1,
        b: 2
      },
      success: res => {
        wx.showToast({
          title: '调用成功',
        })
        this.setData({
          result: JSON.stringify(res.result)
        })
      },
      fail: err => {
        wx.showToast({
          icon: 'none',
          title: '调用失败',
        })
        console.error('[云函数] [sum] 调用失败：', err)
      }
    })
  },


  /**
   * 生命周期函数--监听页面加载
   */
  onLoad: function (options) {
    
  },

  /**
   * 生命周期函数--监听页面初次渲染完成
   */
  onReady: function () {

  },

  /**
   * 生命周期函数--监听页面显示
   */
  onShow: function () {
    const db = wx.cloud.database()

    // 查询所有学生
    db.collection('user_info').where({
      type: "student"
    }).limit(20).get({
      success: res => {
        this.setData({
          studentInfoList: res.data
        })
        console.log('[数据库] [查询记录] 成功: ', res)
      },
      fail: err => {
        wx.showToast({
          icon: 'none',
          title: '查询记录失败'
        })
        console.error('[数据库] [查询记录] 失败：', err)
      }
    })
    
  },

  /**
   * 页面上拉触底事件的处理函数
   */
  onReachBottom: function () {
    var that = this;
    // 显示加载图标
    wx.showLoading({
      title: '玩命加载中',
    })
    // 页数+1
    const db = wx.cloud.database()

    // 查询所有学生
    db.collection('user_info').where({
      type: "student"
    }).skip((this.data.page + 1)*20)
      .limit(20) // 限制返回数量为 5 条
      .get({
      success: res => {
        this.setData({
          studentInfoList: this.data.studentInfoList.concat(res.data),
          page : this.data.page + 1
        })
        console.log('[数据库] [查询记录] 成功: ', res)
        // 隐藏加载框
        wx.hideLoading();
      },
      fail: err => {
        wx.showToast({
          icon: 'none',
          title: '查询记录失败'
        })
        console.error('[数据库] [查询记录] 失败：', err)
        // 隐藏加载框
        wx.hideLoading();
      },

    })

  },

  // 下拉刷新
  onPullDownRefresh: function () {
    // 显示顶部刷新图标
    wx.showNavigationBarLoading();
    const db = wx.cloud.database()

    // 查询所有学生
    db.collection('user_info').where({
      type: "student"
    }).limit(20).get({
      success: res => {
        this.setData({
          studentInfoList: res.data
        })
        console.log('[数据库] [查询记录] 成功: ', res)
        // 隐藏导航栏加载框
        wx.hideNavigationBarLoading();
        // 停止下拉动作
        wx.stopPullDownRefresh();
      },
      fail: err => {
        wx.showToast({
          icon: 'none',
          title: '查询记录失败'
        })
        console.error('[数据库] [查询记录] 失败：', err)
        // 隐藏导航栏加载框
        wx.hideNavigationBarLoading();
        // 停止下拉动作
        wx.stopPullDownRefresh();
      }
    })
  },


  // 上传文件
  doUpload: function () {
    const db = wx.cloud.database()
    // 选择消息文件
    wx.chooseMessageFile({
      count: 10,
      type: 'all',
      success(res) {
        // 文件路径
        var tempFiles = res.tempFiles
        console.log(tempFiles[0].path)

        // 读取文件
        wx.getFileSystemManager().readFile({
          filePath: tempFiles[0].path,
          encoding: 'utf-8',
          success: res => {
            // 解析文件
            var lines = res.data.split(';');
            var lineArray = new Array();
            for (var i = 0; i < lines.length; i++) {
              if (lines[i].length < 5) {
                continue
              }
              lineArray.push(lines[i]);
            }

            lineArray.forEach(function(e){
              var items = e.split('|');

              var name = items[0].replace(/\ /g, "").replace(/\r/g, "").replace(/\n/g, "");
              var classStudent = items[1];
              var grade = items[2];
              var date = items[3];
              var score = JSON.parse(items[4]);
              var note = items[5];

              // 写入成绩表
              db.collection('student_score').add({
                data: {
                  name: name,
                  class: classStudent,
                  grade: grade,
                  date: date,
                  score: score,
                  note: note
                },
                success: res => {

                  // 在返回结果中会包含新创建的记录的 _id
                  console.log('[数据库] [新增记录] 成功，写入学生成绩，记录 _id: ', res._id)

                  try{
                    // 查学生表，不存在则创建学生
                    db.collection('user_info').where({
                      name: name,
                      class: classStudent
                    }).get({
                      success: resStud => {
                        console.log('[数据库] [查询记录] 成功, 根据姓名和班级查询学生是否存在: ', resStud)

                        if (resStud.data.length == 0) {
                          console.log('开始新增学生');

                          try {
                            var s = [];
                            var hexDigits = "0123456789abcdef";
                            for (var i = 0; i < 15; i++) {
                              s[i] = hexDigits.substr(Math.floor(Math.random() * 0x10), 1);
                            }
                            s[14] = "4"; // bits 12-15 of the time_hi_and_version field to 0010
                            s[19] = hexDigits.substr((s[19] & 0x3) | 0x8, 1); // bits 6-7 of the clock_seq_hi_and_reserved to 01
                            s[8] = s[13] = s[18] = s[23] = "";

                            var uuid = s.join("");

                            // 创建学生
                            console.log(uuid)
                            db.collection('user_info').add({
                              data: {
                                name: name,
                                class: classStudent,
                                type: "student",
                                key: uuid
                              },
                              success: resInser => {
                                // 在返回结果中会包含新创建的记录的 _id
                                console.log('[数据库] [新增记录] 新增学生成功: ', resInser._id)
                              },
                              fail: err => {
                                console.error('[数据库] [新增记录] 新增学生失败: ', err)
                              },
                            }) // add结束
                          } catch (err) {
                            console.log(err);
                          }
                        } // if结束
                      },
                      fail: err => {
                        console.error('[数据库] [查询记录] 失败, 根据姓名和班级查询学生是否存在：', err)
                      }
                    })
                  }catch(err){
                    console.log(err);
                  }
                },
                fail: err => {
                  console.error('[数据库] [新增记录] 写入学生成绩失败：', err)
                }
              })
            })
            
            wx.showToast({
              title: '导入成功'
            })
          }
        })
      }
    })
  },


  

  /**
   * 生命周期函数--监听页面隐藏
   */
  onHide: function () {

  },

  /**
   * 生命周期函数--监听页面卸载
   */
  onUnload: function () {

  },

  /**
   * 用户点击右上角分享
   */
  onShareAppMessage: function () {

  },

  touchEnd: function (e) {
    this.setData({
      "endX": e.changedTouches[0].clientX,
      "endY": e.changedTouches[0].clientY
    });
    console.log()
    var turn = this.getTouchData(this.data.endX, this.data.endY, this.data.startX, this.data.startY);
  },
  touchStart: function (e) {
    this.setData({
      "startX": e.changedTouches[0].clientX,
      "startY": e.changedTouches[0].clientY
    });

  },

  getTouchData: function (endX, endY, startX, startY) {
    let turn = "";
    if (endX - startX > 50 && Math.abs(endY - startY) < 50) {      //右滑
      turn = "right";
      if (this.data.currentTab != 0) {
        this.setData({
          currentTab: this.data.currentTab - 1,
        })
      }
    } else if (endX - startX < -50 && Math.abs(endY - startY) < 50) {   //左滑
      turn = "left";
      if (this.data.currentTab != 2) {
        this.setData({
          currentTab: this.data.currentTab + 1,
        })
      }
    }
    return turn;
  }
})